﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TARLib.Operazioni
{
    public static class Management
    {
        public static Operazione GetOperazioneFromBarcode(string barcodeString)
        {
            // Tabella di mapping delle operazioni
            if (barcodeString.Length >= 3)
            {
                switch (barcodeString.Substring(0, 3))
                {
                    case "001":
                        return new Operazione_OrdineAggiungiProdotto(barcodeString);
                    case "002":
                        return new Operazione_OrdineRimuoviProdotto(barcodeString);
                    case "003":
                        return new Operazione_OrdineAzzera(barcodeString);
                    case "004":
                        return new Operazione_OrdineAggiungiCustom(barcodeString);
                    case "005":
                        return new Operazione_OrdineChiudi(barcodeString);
                    case "006":
                        return new Operazione_Incassa(barcodeString);
                    case "007":
                        return new Operazione_AggiungiNota(barcodeString);
                    case "008":
                        return new Operazione_RicaricaUltimaERistampa(barcodeString);
                    case "009":
                        return new Operazione_AggiungiNotaServizio(barcodeString);
                    case "020":
                        return new Operazione_Login(barcodeString);
                    case "021":
                        return new Operazione_Logout(barcodeString);
                    case "100":
                        return new Operazione_Comanda(barcodeString);
                    case "101":
                        return new Operazione_Vassoio(barcodeString);
                    case "201":
                        return new Operazione_StampaRemotaDopoCheckInForza(barcodeString);
                    case "202":
                        return new Operazione_StampaRemotaDopoCheckInNoForza(barcodeString);
                    case "500":
                        return new Operazione_Tavolo(barcodeString);
                    default:
                        throw new Exception("Command not found for barcode (" + barcodeString + ")");
                }
            }
            else
            {
                throw new Exception("Barcode string format unrecognized (" + barcodeString + ")");
            }
        }
    }
}
